home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
multi-4a
/
server_c.bas
< prev
next >
Wrap
BASIC Source File
|
1999-08-31
|
4KB
|
177 lines
Attribute VB_Name = "login_logout"
'this bas file contains the connection information which
'allows more than 1 user to join, and leave. also handles
'their accounts.
Sub new_connection(requestid As Long)
'new connection, so give them a socket
'socket for new user to have
Dim use_socket As Integer
'check if the server is full (with clients) or not
If live_connections >= max_clients Then disallow_connection requestid, message_1: Exit Sub
'search the loaded sockets to see if any are long
For i = 1 To (main.sock.Count - 1)
If main.sock(i).Tag = "0" Then
use_socket = i
GoTo found_sock
End If
Next i
'no sockets free so create a new socket
Dim socket_to_create As Integer
socket_to_create = main.sock.Count
Load main.sock(socket_to_create)
use_socket = socket_to_create
found_sock:
'log them in (if no socket found then act as if it were full)
If login_client(use_socket, requestid) = False Then disallow_connection requestid, message_1: Exit Sub
'update info
update_info
End Sub
Function login_client(socket As Integer, requestid As Long) As Boolean
'client connected, so now find him a clientid and setup
'his own account, returns if he managed to log in or not
For i = 1 To max_clients
If client(i).socket = "0" Then
'found an empty client
'set client settings
client(i).connected_at = f_time
client(i).idle_since = f_time
client(i).socket = socket
'tag the socket to remember the clientID
main.sock(socket).Tag = i
'connect them on the chosen socket
main.sock(socket).Close
main.sock(socket).Accept requestid
'User logged in ok (show in status)
update_status "Client " & i & " Logged In (" & main.sock(user_socket).RemoteHostIP & ")"
'recount live-connections
live_connections = live_connections + 1
'send welcome message
send_data socket, message_2
login_client = True
Exit Function
End If
Next i
'All sockets are in use, so return as false
End Function
Sub kickout_client(socket As Integer, notice As String)
'if you log them out and what them to know the reason.
send_data socket, notice
logout_client socket, notice
End Sub
Sub logout_client(socket As Integer, reason As String)
'client has disconnected, so close
'his socket, and blank out his clientid
'so sombody else can use it.
'the reason is simply their for status purposes.
'disconnect him
main.sock(socket).Close
'clear his account (remember its the SOCKET, not clientID)
client(main.sock(socket).Tag).connected_at = "N/A"
client(main.sock(socket).Tag).idle_since = "N/A"
client(main.sock(socket).Tag).socket = "0"
'User logged out (show in status)
update_status "Client " & main.sock(socket).Tag & " Logged Out (" & reason & ")"
'Unasign his socket
main.sock(socket).Tag = "0"
'recount live-connections
live_connections = live_connections - 1
'update info
update_info
End Sub
Sub disallow_connection(requestid As Long, reason As String)
'if you dont want sombody to be allowed to connect,
'instead of just not envoking the new_connection command
'envoke this as it lets them connect to a special socket,
'which'll then tell them the reason they cannot connect
'and then disconnect them from intself.
'ideal for 'server full' style messages
'User logged in ok (show in status)
update_status "Client Rejected (" & reason & ")"
'if no reason given, dont try to tell him it
If reason = "" Then Exit Sub
main.disallow.Close
main.disallow.Accept requestid
DoEvents
main.disallow.SendData reason
DoEvents
main.disallow.Close
End Sub
Function count_sockets() As Integer
'show the number of sockets loaded
count_sockets = main.sock.Count
End Function
Sub count_live_connections()
'recount the connections (not used anymore)
'count how many are connected
Dim temp As Integer
For i = 1 To (main.sock.Count - 1)
If main.sock(i).State <> scklong Then temp = temp + 1
Next i
'set it
live_connections = temp
End Sub